<?php

class loginController extends CController{

    public function __construct($vars) {
        parent::__construct($vars);
        $this->LoadModel("usuario/login", "model");
        $this->model->atualizaStatus();
    }
    
    public function AfterLoad() {    
        $this->free_cod = array('index', 'formulario','inserir', 'logout', 
            'reenviar',  'recuperar', 'confirmar', 'confirmrec', 'logado');
        if(CURRENT_ACTION == "index") return;
        if(in_array(CURRENT_ACTION, array('todos'))&& isset($_SESSION[LINK])) unset($_SESSION[LINK]);
        parent::AfterLoad();
    }
    
    public function index(){

        //se o usuario já está logado
        if($this->model->IsLoged()){
            if(!$this->model->Redirect()){
                Redirect("usuario/login/logado");
            }
        }

        //se usuario enviou algum dado
        if(!empty ($_POST)){
            if($this->model->Login($_POST['email_login'], $_POST['senha_login'])){
                $this->registerVar('status', '1');
                Redirect("usuario/login/logado");
            }
            $this->registerVar('status', '0');
        }

        //se usuario nao logou
        $this->setVars($this->model->getMessages());
        $this->genTags("Faça seu login");
        
        //se usuario ainda nao logou
        $this->display(LINK.'/login');
    }
    
    public function getIndexListType(){
        return "listInTable";
    }
    public function todos(){
        $this->genTags('Gerenciar Usuários');
        $this->model->atualizaStatus();
        parent::index();
    }
    
    public function show($display = true, $link = ''){
        $cod = array_shift($this->vars);
        if($cod == "") Redirect ('usuario/login');
        $this->model->atualizaStatus($cod);
        parent::show($display, $link);
    }
    
    public function inserir(){

        if(!empty ($_POST)){
            $status = $this->model->inserir($_POST);
            $vars   = $this->model->getMessages();
            if($status == true){
                $vars['status']   = '1';
                $vars['redirect'] = 'usuario/login';
            }else $vars['status'] = '0';
            
            $this->setVars($vars);
        }
        $this->genTags("Nova Conta");
        $this->display("usuario/login/inserir");
    }
    
    public function edit($display = true, $link = "") {
        if(!$this->model->UserCanAlter($this->cod)) {
            $this->redirect(LINK . "/show/$this->cod");
        }
        parent::edit($display, $link);
    }
    
    public function apagar() {
        if(!$this->model->UserCanAlter($this->cod)) {
            $this->redirect(LINK . "/show/$this->cod");
        }
        parent::apagar();
    }
    
    public function email(){
        $this->editar("usuario/login/email");
    }
    
    public function senha(){
        $this->editar("usuario/login/senha");
    }
    
    public function editar($url = "usuario/login/editar"){
        //se o usuario já está logado
        if(cookie::cookieExists('guard') && empty($_POST)){
            $temp = cookie::getVar('guard');
            $_POST = $temp['newform'];
        }
        if(!$this->model->IsLoged()) $this->model->needLogin();
        $cod = $this->model->getUserId();
        if($cod == "") $this->logout();
        
        if(!empty ($_POST)){
            $status = $this->model->editar($cod, $_POST);
            $vars   = $this->model->getMessages();
            if(array_key_exists('ajax', $_REQUEST) && $_REQUEST['ajax']) {
                $vars['status'] = ($status == true)? 1:0;
            }
            $this->setVars($vars);
        }
        $this->registerVar('item', $this->model->getItem($cod, "", true));
        $this->genTags("Modificar Dados");
        $this->display($url);
    }
    
    public function identidade(){
        
        if(!cookie::cookieExists('guard')) Redirect(LINK);
        
        $cod = $this->model->getUserId();
        if($cod == "") Redirect (LINK);
        
        $this->genTags("Confirmar Identidade");        
        if(!empty ($_POST) && array_key_exists('senha', $_POST)){
            $user = $this->model->getAutenticatedUser($cod, $_POST['senha']);
            if(!empty($user)) {
                $temp = cookie::getVar("guard");
                $url = $temp['url'];
                $temp['senha'] = $_POST['senha'];
                $temp['newform'] = (is_array($temp['post']) && !empty($temp['post']))?$temp['post']:array();
                cookie::setVar("guard", $temp);
                
                Redirect($url);
            }
            else $this->registerVar("erro","Autenticação falhou: A senha está incorreta.");
        }
        $this->display("usuario/login/identidade");
    }

    public function logout(){
        if($this->model->Logout()) Redirect("usuario/login/index");
        Redirect('usuario');
    }
    
    public function reenviar(){
        $user = array_shift($this->vars);
        $this->model->resend($user);
        $this->setVars($this->model->getMessages());
        $this->genTags("Reenviar Confirmação");
        $this->display('usuario/login/reenviar');
    }
    
    public function logado(){
        if(!$this->model->IsLoged()) Redirect("usuario/login/");
        $cod = $this->model->getCodUsuario();
        $this->registerVar('item', $this->model->getItem($cod, "", true));
        $this->genTags("Página do usuário");
        $this->display('usuario/login/logado');
    }

    /*recupera a senha de um usuario*/
    public function recuperar(){

        //verifica se usuário está online
        if($this->model->IsLoged()){$this->logado();}

        //solicita a recuperacao da conta
        if(!empty($_POST)) $this->model->RecoverPassword($_POST['email']);
        $arr = $this->model->getMessages();
        
        //exibe o formulário
        $this->genTags("Recuperar Acesso");
        $this->display('usuario/login/recuperar', $arr);
    }

    public function confirmrec(){
        $dados = array_shift($this->vars);
        if(!$this->model->ConfirmRecoverPassword($dados)){
            $this->setVars($this->model->getMessages());
            $this->display('');
        }
        $this->setVars($this->model->getMessages());
        $this->index();
    }
    
    public function confirmar(){
        $dados = array_shift($this->vars);
        $this->model->Confirm($dados);
        cookie::setVar($this->sess_cont_alerts, $this->model->getMessages());
        Redirect(LINK);
    }

    public function tutorial(){
        if($this->model->IsEnabledTutorial()) {
            $this->model->disableTutorial();
        }
        else $this->model->enableTutorial();
        
        $this->setVars($this->model->getMessages());
        $this->display('');
    }
    
    public function why_confirm(){
        $this->display(LINK."/whyconfirm");
    }
    
    public function confirm_resend(){
        $this->model->resend_confirmation();
        cookie::setVar($this->sess_cont_alerts, $this->model->getMessages());
        $this->index();
    }
    
    public function block(){
        if($this->cod == "") Redirect ('usuario/login/todos');
        $this->model->blockUser($this->cod);
        $this->redirect('usuario/login/todos');
    }
    
    public function unblock(){
        if($this->cod == "") Redirect ('usuario/login/todos');
        $this->model->unblockUser($this->cod);
        $this->redirect('usuario/login/todos');
    }
    
}

?>